데코레이터 디자인 패턴을 사용하면 객체의 기능을 수정/확장할 수 있다.
프록시 디자인 패턴도 객체의 기능을 수정/확장하는데 사용되지만, 기존 API의 사용 방식을 정확히 동일하게
유지하면서 내부 동작만 달리하는 디자인 패턴이다.
스마트 포인터스마트 포인터는 포인터의 참조 횟루를 관리하고, 몇몇 연산자를 오버라이딩하는 래퍼이다.
(일반적인 포인터와 완전히 동일하게 사용(API)할 수 있도록 지원한다-포인터의 인터페이스를 유지)
struct BankAccount{
void deposit(int amount){}
};
BankAccount *ba=new BankAccount;
ba->deposit(123);
auto ba2=make_shared<BankAccount>();
ba2->deposit(123);
위처럼 스마트 포인터는 포인터와 동일한 인터페이스를 지원하기 때문에
포인터가 사용될 자리에 스마트 포인터가 대신 사용도리 수 있다.